package com.zrrd.homework._0520_0526.h4;

import java.io.*;
import java.util.Arrays;

/**
 * @author WanJl
 * @version 1.0
 * @title UserServiceImpl
 * @description
 * @create 2024/5/25
 */
public class UserServiceImpl implements UserService{
    /**
     * 用户注册的方法
     *
     * @param user 用户
     * @return
     */
    @Override
    public boolean register(User user) {
        //1、创建File对象，指定存放文本的路径
        String pathname="E:/users/"+user.getUsername()+".txt";
        File f=new File(pathname);
        //判断你是否存在
        if(!f.exists()){
            try {
                //如果不存在，则新建文件
                f.createNewFile();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }else {
            //如果该文件存在，则返回false
            return false;
        }
        //2、将User对象中的属性名和属性值存入到新建的文本文件中
        FileOutputStream fos=null;
        try {//检测，是否可能存在的异常
            fos=new FileOutputStream(f);
            /*
                name=张三
                username=zhangsan
                password=123456
             */
            String nameInfo="name="+user.getName()+"\n";
            String usernameInfo="username="+user.getUsername()+"\n";
            String passwordInfo="password="+user.getPassword()+"\n";

            //将信息写入到指定文本
            fos.write(nameInfo.getBytes("UTF-8"));
            fos.write(usernameInfo.getBytes("UTF-8"));
            fos.write(passwordInfo.getBytes("UTF-8"));
        } catch (FileNotFoundException e) {//处理存在的异常
            throw new RuntimeException(e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                fos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return true;
    }

    /**
     * 用户登录的方法
     *
     * @param username 用户名
     * @param password 密码
     * @return
     */
    @Override
    public boolean login(String username, String password) {
        //1、判断用户名是否存在——其实就是判断那个文件是否存在
        File file=new File("E:/users/"+username+".txt");
        if(!file.exists()){
            //如果不存在，说明未注册，返回false
            return false;
        }
        //2、读取文件--文件字节输入流---FileInputStream
        FileInputStream fis=null;
        try {
            fis=new FileInputStream(file);
            //创建一个用来存在读取到的字节的字节数组
            byte[] bytes=new byte[1024];
            //每一次读取到的字节
            int len=1;
            while ((len=fis.read(bytes))!=-1){
                //获取文本内容，转换为字符串
                String info = new String(bytes, 0, len);
                String[] infos=info.split("\n");
                //System.out.println(Arrays.toString(infos));

                //获取每个元素的内容
                String usernameInfo=infos[1];
                String passwordInfo=infos[2];

                String uname = usernameInfo.substring(usernameInfo.indexOf("=")+1);
                String pwd = passwordInfo.substring(passwordInfo.indexOf("=")+1);

//                System.out.println(uname);
//                System.out.println(pwd);

                if (uname.equals(username) && pwd.equals(password)){
                    return true;
                }
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return false;
    }
}
